
package com.zsq.thread.test6lock1;

import java.util.concurrent.TimeUnit;
/**
 * todo 可重入锁 他们锁对象是同一对象,直接执行
 * 本例中由于m1锁定this,只有m1执行完毕的时候,m2才能执行
 * 这里是复习synchronized最原始的语义
 * 在m1中调用m2 ,这时 m1和m2 锁住是同一对象 因此m1执行同时m2也能执行
 */
public class ReentrantLock1 {
	synchronized void m1() {
		for(int i=0; i<10; i++) {
			try {
				TimeUnit.SECONDS.sleep(1);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			System.out.println(i);
			//if(i == 2) m2();
		}

	}

	synchronized void m2() {
		System.out.println("m2 ...");
	}

	public static void main(String[] args) {
		ReentrantLock1 rl = new ReentrantLock1();
		new Thread(rl::m1).start();
		try {
			TimeUnit.SECONDS.sleep(1);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		new Thread(rl::m2).start();
	}
}
